"""
@name : 面向对象作业
@author : qhy
@projectname: tiannongbabu
"""
# ==============1.题目==========================#
# 回合制对战游戏
# • 创建角色：名字、性别、血量、装备
# • 创建房间： • 角色可加入房间 • 房间内的人可互打 • 房间上限2人
# • 战斗• 装备-防弹衣 • 血量默认100 • 正常被攻击-10滴血 • 有防弹衣-5滴血

#===============2.需求分析=======================#
#1.创建两个类
#  ”角色类“：{属性}：名字、性别、血量（默认100）、房间   {行为}：战斗
#  “房间类”：{属性}：名字、成员    {行为}：让角色加入房间
# 2.创建主程序（1：创建角色、2：创建房间、3：加入房间、4：开始战斗、5：退出）

#定义角色类Role
class Role():
    def __init__(self,name,sex,blood=100,body_armor=None):
        self.name = name
        self.sex = sex
        self.blood = blood
        self.body_armor = body_armor
        self.room = None
    def attack(self,other):
        #打斗前条件：在同一个房间，两个角色
        if self.room == other.room:
            if self != other:
                if self.blood >= 0 and other.blood >= 0:
                    reduce_blood = 5 if other.body_armor else 10
                    #别人防弹衣为真，即有防弹衣就血量减少5，反之减少10
                    other.blood -= reduce_blood
                    print(f"{self.name}攻击{other.name}减少了{reduce_blood}的血量")
                else:
                    print("有一方已经死亡，不能攻击啦！")
                    exit()
            else:
                print("不可以打自己哦！")
        else:
            print("要在一个房间才可以战斗哦！")


#定义房间类Room
class Room():
    def __init__(self,name):
        self.name = name
        self.member = []
    def join(self,role):
        #加入房间前条件：角色的房间为None，房间成员小于两个
        if role.room == None:
            if len(self.member) < 2:
                self.member.append(role)
                role.room = self.name
            else:
                print("此房间已满")
        else:
            print("此角色已经加入房间了")

#定义主程序
role = dict()
room = dict()
while True:
    print("请选择数字：1.创建角色\t2.创建房间\t3.加入房间\t4.开始战斗\t5.退出")
    enter = input("请输入你的选择：")
    if enter.isdigit():
        enter = int(enter)
        if 1 <= enter <=5:
            if enter == 1:
                name, sex = input("请输入要创建角色的名字和性别，空格隔开").split()
                #split()是为了 分割将字符赋给两个变量
                role[name] = Role(name,sex)
                def_blood = input("请输入自定义血量：")
                if def_blood.isdigit():
                    role[name].blood = int(def_blood)
                    print(f"自定义成功，用户{name}当前血量{role[name].blood}")
                else:
                    print(f"自定义失败，用户{name}当前血量{role[name].blood}")
                wear_bodu_armor = input("输入y装备防弹衣")
                if wear_bodu_armor == "y":
                    role[name].body_armor = 1
                    print(f"恭喜{name}获得防弹衣装备")

            elif enter == 2:
                name = input("请输入房间名；")
                room[name] = Room(name)

            elif enter == 3:
                print(f"当前角色有{role.keys()},当前房间有{room.keys()}")
                role_name, room_name = input("请输入要加入的角色和房间名，空格隔开").split()
                room[room_name].join(role[role_name])
                #从房间字典中取出房间对象，调用房间对象的join()方法

            elif enter == 4:
                print(f"当前房间有{room.keys()}")
                room_name = input("请输入房间的名字:")
                #选房间打斗
                if len(room[room_name].member) == 2:
                    while True:
                       room[room_name].member[0].attack(room[room_name].member[1])
                       room[room_name].member[1].attack(room[room_name].member[0])
                       #通过字典获取房间实例对象，member是房间的属性
                else:
                    print(f"房间{room_name}人数不足两人，不可对战！")

            elif enter == 5:
                print("退出对战")
                break
        else:
            print("请输入1~5的数字！")
    else:
        print("请输入数字哦！")





